﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

using SIMA.Mvvm.Base;
using SIMA.Entities;
using SIMA.Core.Enums;
using SIMA.Core.Security;
using SIMA.Services;


namespace SIMA.Mvvm.Gestiones
{
    public class MvvmGestionarPerfil:ViewModelBase
    {
        #region Fields

        private bool isBusy = false;
        private string actionState = string.Empty;
        private List<T_C_Perfil> perfiles = null;
        private T_C_Perfil perfilSeleccionado = null;
        private List<T_C_Estado> estados = null;
        private T_C_Estado estadoSeleccionado = null;
        private FilterType filtro;
        private Profile profile;

        IT_C_PerfilService perfilService;
        
        #endregion

        #region Properties

        public bool IsBusy
        {
            get
            {
                return isBusy;
            }
            set
            {
                isBusy = value;
                this.OnPropertyChanged("IsBusy");

            }
        }

        public string ActionState
        {
            get
            {
                return actionState;
            }
            set
            {
                actionState = value;
                this.OnPropertyChanged("ActionState");
            }
        }

        public List<T_C_Perfil> Perfiles
        {
            get
            {
                return perfiles;
            }
            set
            {
                perfiles = value;
                this.OnPropertyChanged("Perfiles");
            }
        }

        public T_C_Perfil PerfilSeleccionado
        {
            get
            {
                return perfilSeleccionado;
            }
            set
            {
                perfilSeleccionado = value;
                this.OnPropertyChanged("PerfilSeleccionado");
            }
        }

        public List<T_C_Estado> Estados
        {
            get
            {
                return estados;
            }
            set
            {
                estados = value;
                this.OnPropertyChanged("Estados");
            }
        }

        public T_C_Estado EstadoSeleccionado
        {
            get
            {
                return estadoSeleccionado;
            }
            set
            {
                estadoSeleccionado = value;
                this.OnPropertyChanged("EstadoSeleccionado");
            }
        }

        public FilterType Filtro
        {
            get
            {
                return filtro;
            }
            set
            {
                filtro = value;
                this.OnPropertyChanged("Filtro");
            }
        }

        public Profile Profile
        {
            get
            {
                return profile;
            }
            set
            {
                profile = value;
                this.OnPropertyChanged("Profile");
            }
        }

        #endregion

        #region Constructor

        public MvvmGestionarPerfil()
        {
            Connect();
            GetPerfiles();
        }

        #endregion

        #region Private Methods

        private void Connect()
        {
            ActionState = "Estableciendo conexión con el servidor.";
            IsBusy = true;
            ChannelFactory<IT_C_PerfilService> factory = new ChannelFactory<IT_C_PerfilService>("netTcpPerfil");
            factory.Open();
            perfilService = factory.CreateChannel();
            IsBusy = false;
        }

        #endregion

        #region Public Methods

        public void GetPerfiles()
        {
            IsBusy = true;
            ActionState = "Descargando información.";
            perfilService.BeginGetAllT_C_Perfil(Profile, OnGetPerfiles, null);
        }

        public void OnGetPerfiles(IAsyncResult asyncResult)
        {
            lock (this)
            {
                Perfiles = perfilService.EndGetAllT_C_Perfil(asyncResult);
                IsBusy = false;
            }
        }

        #endregion
    }
}
